/*
    自己实现一个事件的监听和触发的过程

*/ 
/*
    1. ES6中引入的class类的用法
    2. class中的super（） 的作用
    3. process.exit();
*/ 

/*
    对于引入events的原生模板之后 ， on函数其实就是注册监听器
    emit函数用于触发事件
*/ 

class Events {
    // 这个方法就是起到添加事件的作用 ， 就是如果不存在该事件 ， 那么就添加该事件 ， 然后创建一个数组 ， 存储该事件的回调函数
    on(eventName, fn) {
        if(typeof(this.listeners[eventName]) === 'undefined') {
            this.listeners[eventName] = [];
        }
        console.log(this.listeners[eventName]);
        this.listeners[eventName].push(fn);
    }
    // emit方法就是如果该事件满足条件了之后 ， 然后就遍历该事件的内的回调函数 ， 并且执行
    emit(eventName , fn) {
        if(typeof(this.listeners[eventName]) === 'undefined') {
            console.log(eventName + "not exists");
            process.exit();
        }
        this.listeners[eventName].forEach(item => {
            // console.log(item);
            item();
        })
    }
    listeners = {}
}

let myEvent = new Events();
myEvent.on("test" , () => {
    console.log("this is a test");
});
myEvent.emit("test");